﻿using System.Collections.Generic;
using System.Linq;
using Gp.Input;
using Gp.Scripts.Core;
using QFramework;
using UnityEngine;

namespace Gp.Scripts.GUI {
    public class ActionUIController : MonoBehaviour, IController {
        // public BaseUnit CurUnit => this.GetSystem<CellGridSystem>().CurrentUnit;
        // private Dictionary<BehaviourMode, ActionButton> _dic;
        //
        // private void Awake() {
        //     _dic = new Dictionary<BehaviourMode, ActionButton>();
        //
        //     var buttons = GetComponentsInChildren<ActionButton>();
        //     foreach (var b in buttons) {
        //         _dic[b.behaviourMode] = b;
        //         b.gameObject.SetActive(false);
        //     }
        //
        //     this.RegisterEvent<UpdateActionOptionEvent>(UpdateActionUI);
        // }
        //
        //
        // private void Update() {
        //     var change = GridBattleInputSystem.Instance.GetActionChangeAmount();
        //     if (change == 0) return;
        //     if (!CurUnit) {
        //         ClearActionUI();
        //         return;
        //     }
        //
        //     int dir = change > 0 ? 1 : -1;
        //
        //     var curMode = CurUnit.AbilityManager.CurrentSelected;
        //     if (curMode == BehaviourMode.None) {
        //         return;
        //     }
        //
        //     List<ActionButton> available =
        //         new List<ActionButton>(_dic.Values.Where(i => CurUnit.AbilityManager.IsAvailable(i.behaviourMode)));
        //     int temp = available.Count;
        //     for (int i = 0; i < temp; i++) {
        //         if (available[i].behaviourMode == curMode) {
        //             available[(temp + i + dir) % temp].button.onClick.Invoke();
        //         }
        //     }
        // }
        //
        //
        // public void UpdateActionUI(UpdateActionOptionEvent e) {
        //     if (!e.Unit == CurUnit) return;
        //     ClearActionUI();
        //
        //     foreach (var button in e.Actions.Select(GetButton).Where(button => button != null)) {
        //         button.gameObject.SetActive(true);
        //     }
        // }
        //
        //
        // private ActionButton GetButton(BehaviourMode mode) {
        //     return _dic[mode];
        // }
        //
        // private void ClearActionUI() {
        //     foreach (var value in _dic.Values) {
        //         value.gameObject.SetActive(false);
        //     }
        
        
        
        
        public IArchitecture GetArchitecture() {
            return MainArchitecture.Interface;
        }
    }
}